﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using FinanSoft.Utilities;
using FinanSoft.Entities;
using FinanSoft.BusinessLayer;
using System.Collections;

namespace FinanSoft.PresentacionSociosNegocios
{
    public partial class frmCuentasAuxiliares : Form
    {
        List<int> _accountIds;

        public frmCuentasAuxiliares()
        {
            InitializeComponent();
            fillGridCatalogo();
        }

        /// <summary>
        /// Borra las filas actuales del catálogo de cuentas auxiliares y llena la tabla con las cuentas auxiliares actuales
        /// </summary>
        private void fillGridCatalogo()
        {
            gridCatalogo.Rows.Clear();
            Hashtable auxiliarTable = AuxiliaryAccountManager.GetInstance().GetAuxiliarAccountsList();
            if (!AuxiliaryAccountManager.GetInstance().IsError)
            {
                _accountIds = new List<int>();
                foreach (AuxiliarAccount auxAccount in auxiliarTable.Values)
                {
                    _accountIds.Add(auxAccount.AccountID);
                    gridCatalogo.Rows.Add(new object[] 
                    {auxAccount.AccountCode, auxAccount.Name, auxAccount.AccountType == Constants.AuxiliarAccountType.client ? "Cliente" : "Proveedor", auxAccount.AccountCurrency.Abbreviation,
                        auxAccount.Amount.ToString("F")+" "+auxAccount.AccountCurrency.Symbol});
                }
            }
            else
            {
                MessageBox.Show(AuxiliaryAccountManager.GetInstance().ErrorMessage, MessageConstants.TITLE, MessageBoxButtons.OK, MessageBoxIcon.Error);
                Close();
            }
        }

        /// <summary>
        /// Evento que se encarga de abrir la ventana de crear cuenta, y actualizar la lista
        /// después de cerrada la ventana
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void btnCrearCuenta_Click(object sender, EventArgs e)
        {
            // Cargamos y mostramos el formulario Crear Cuenta
            frmCrearCuentaAuxiliar frmCrearCuentaV = new frmCrearCuentaAuxiliar(Constants.INVALID_ID);
            frmCrearCuentaV.ShowDialog(this);     // Mostramos el formulario de forma modal.
            fillGridCatalogo();
        }

        /// <summary>
        /// Evento para salir de la pantalla
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void btnSalir_Click(object sender, EventArgs e)
        {
            Close();
        }

        private void btnEliminarCuenta_Click(object sender, EventArgs e)
        {
            if (gridCatalogo.SelectedRows.Count == 0)
                MessageBox.Show(MessageConstants.NO_SELECTED_ACCOUNT, MessageConstants.TITLE, MessageBoxButtons.OK, MessageBoxIcon.Warning);
            else
            {
                int deletedId = _accountIds[gridCatalogo.SelectedRows[0].Index];
                AuxiliaryAccountManager.GetInstance().DeleteAuxiliarAccount(deletedId);
                if (AuxiliaryAccountManager.GetInstance().IsError)
                    MessageBox.Show(AuxiliaryAccountManager.GetInstance().ErrorMessage, MessageConstants.TITLE, MessageBoxButtons.OK, MessageBoxIcon.Error);
                else
                {
                    MessageBox.Show(MessageConstants.ACCOUNT_DELETED, MessageConstants.TITLE, MessageBoxButtons.OK, MessageBoxIcon.Asterisk);
                    fillGridCatalogo();
                }
            }
        }

        /// <summary>
        /// Evento que se encarga de abrir la ventana de crear cuenta (pero para la edición de una cuenta) y actualizar la lista
        /// después de cerrada la ventana
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void btnEditarCuenta_Click(object sender, EventArgs e)
        {
            if (gridCatalogo.SelectedRows.Count == 0)
                MessageBox.Show(MessageConstants.NO_SELECTED_ACCOUNT, MessageConstants.TITLE, MessageBoxButtons.OK, MessageBoxIcon.Warning);
            else
            {
                int editedId = _accountIds[gridCatalogo.SelectedRows[0].Index];
                // Cargamos y mostramos el formulario Crear Cuenta
                frmCrearCuentaAuxiliar frmCrearCuentaV = new frmCrearCuentaAuxiliar(editedId);
                frmCrearCuentaV.ShowDialog(this);     // Mostramos el formulario de forma modal.
                fillGridCatalogo();
            }
        }
    }
}
